﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using TPTecnicas.MessageProcessor.Common;
using TPTecnicas.MessageProcessor.Business;
using System.ComponentModel.Composition;


namespace TPTecnicas.MessageProcessor.Rules
{
    [Export(typeof(IRule))]
    [ExportMetadata("Name", "AltaMateria")]
    public class AltaMateria : Rule
    {
        [ImportingConstructor]
        public AltaMateria([Import("context")]IUniversityContext context)
            : base(context)
        {

        }

        /// <summary>
        /// Applies the rule to the email.
        /// </summary>
        /// <param name="message">The email.</param>
        /// <returns>Wheter or not the rule was applicable</returns>
        public override void ApplyTo(IMessage message)
        {
            var match = GetMatch(message);
            if (match.Success)
            {
                Notify(message);

            }

            if (message.Subject.Contains("ALTA-MATERIA"))
            {
                //TODO
                //Sería útil, tener alguna estadistica de cuantos mails son recibidos y no matchean a una regla 
                //por lo que son rebotados, como para mejorar la regla o la explicación de la misma
            }
        }

        protected override Match GetMatch(IMessage message)
        {
            var regex = new Regex(@"^\[ALTA-MATERIA-(?<codigo>\w+)\] (?<padron>\d+)-(?<nombre>.*)$");
            return regex.Match(message.Subject);
        }
    }
}
